/*******************************************************************************
 * Copyright (c) 2012 itemis AG (http://www.itemis.eu) and others.
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * SPDX-License-Identifier: EPL-2.0
 * 
 * Author - Sebastian Zarnekow
 * See https://github.com/szarnekow/xtend-euler 
 *******************************************************************************/
 package euler

/**
 * The sequence of triangle numbers is generated by adding the natural numbers.
 * So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first ten terms would be:
 *
 * 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...
 *
 * Let us list the factors of the first seven triangle numbers:
 *
 *     1: 1
 *     3: 1,3
 *     6: 1,2,3,6
 *    10: 1,2,5,10
 *    15: 1,3,5,15
 *    21: 1,3,7,21
 *    28: 1,2,4,7,14,28
 *
 * We can see that 28 is the first triangle number to have over five divisors.
 *
 * What is the value of the first triangle number to have over five hundred divisors?
 *
 * @see http://projecteuler.net/problem=12
 */
class Solution_012 {

	def static void main(String[] args) {
		var triangle = 0L
		var i = 1L
		while(true) {
			triangle = triangle + i
			i = i + 1
			if (numberOfDivisors(triangle) > 500) {
				println(triangle)
				return
			}
		}
	}

	def static numberOfDivisors(long triangle) {
		var max = Math.sqrt(triangle).longValue
		var result = 0L
		var i = 1L
		while(i < max) {
			if (triangle % i == 0) {
				result = result + 2
			}
			i = i + 1
		}
		return result
	}

}